//package com.ml.redis.lock;
//
//import com.google.common.hash.BloomFilter;
//import com.google.common.hash.Funnels;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.data.redis.core.ValueOperations;
//
//import java.util.concurrent.TimeUnit;
//
///**
// * 解决缓存穿透和缓存击穿示例代码-残缺
// * @author xr-8
// * @date 2021-08-18
// * @time 23:06
// */
//public class Cache {
//
//    @Autowired
//    ValueOperations valueOperations;
//
//    private static int size = 1000000;//预计要插入多少数据
//    private static double fpp = 0.01;//期望的误判率
//    private static BloomFilter<Integer> bloomFilter = BloomFilter.create(Funnels.integerFunnel(), size, fpp);
//
//    //提高性能保护数据库
//    public String selectOrderById(Integer id) { //1001
//        //解决缓存穿透
//        if (!bloomFilter.isExist(String.valueOf(id))) {
//            return "非法访问";
//        }
//        //查询缓存
//        Object redisObj = valueOperations.get(String.valueOf(id));
//        //命中缓存
//        if (redisObj != null) {
//            //正常返回数据
//            return "OK";
//        }
//        //获取锁后,再查一次缓存
//        redisLock.lock(String.valueOf(id));//97      //自旋式分布式锁
//        try {
//            //获取锁后再查一次缓存
//            //查询缓存
//            redisObj = valueOperations.get(String.valueOf(id));
//            //命中缓存
//            if (redisObj != null) {
//                //正常返回数据
//                return "OK";
//            }
//            String order = "执行业务逻辑";
//            if (order != null) {
//                valueOperations.set(String.valueOf(id), order, 10, TimeUnit.MINUTES);
//                return "OK";
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }
//}
